{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "89281602",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T07:25:34.407236Z",
     "start_time": "2024-09-27T07:25:34.403961Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import torch\n",
    "from torch import nn\n",
    "import joblib\n",
    "import math\n",
    "import xgboost as xgb\n",
    "from sklearn.preprocessing import MinMaxScaler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "8a7d5fa8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T07:25:34.615979Z",
     "start_time": "2024-09-27T07:25:34.611874Z"
    }
   },
   "outputs": [],
   "source": [
    "# 计算距离\n",
    "def Span(data):\n",
    "    R = 6371.393  # 地球半径，单位为千米  ##851,881   800,809   131,150\n",
    "    for i in range(800,899):###################################################################          133\n",
    "        # A地  \n",
    "        jingduA, weiduA = data.loc[i-1,['经度','纬度']]\n",
    "        # B地  \n",
    "        jingduB, weiduB = data.loc[i,['经度','纬度']]\n",
    "\n",
    "        # 将经纬度转换为弧度  \n",
    "        latA, lonA = math.radians(weiduA), math.radians(jingduA)  \n",
    "        latB, lonB = math.radians(weiduB), math.radians(jingduB)  \n",
    "\n",
    "        # 哈弗辛公式  \n",
    "        dlat = latB - latA  \n",
    "        dlon = lonB - lonA  \n",
    "        a = math.sin(dlat/2)**2 + math.cos(latA) * math.cos(latB) * math.sin(dlon/2)**2  \n",
    "        c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))  \n",
    "\n",
    "        distance = R * c * 1000  # 距离，单位为米  \n",
    "        # 转换为米  \n",
    "        data['距离差'][i]=distance\n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "8600a8a4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T07:25:34.830415Z",
     "start_time": "2024-09-27T07:25:34.827083Z"
    }
   },
   "outputs": [],
   "source": [
    "# 定义一个函数来提取指定位置的字段内容\n",
    "def extract_field(text, position):\n",
    "    # 根据逗号分隔字符串\n",
    "    fields = text.split(',')\n",
    "    \n",
    "    # 确保位置有效\n",
    "    if position < len(fields):\n",
    "        return fields[position]\n",
    "    else:\n",
    "        return None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "9cfc2aba",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T07:25:36.040426Z",
     "start_time": "2024-09-27T07:25:35.076204Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\2002714984.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  data['距离差'][i]=distance\n"
     ]
    }
   ],
   "source": [
    "# 假设 data 是一个 Pandas DataFrame，包含经纬度、速度、方向和运动状态的序列数据\n",
    "# 数据集格式：[经度1, 纬度1, 速度1, 方向1, 运动状态1, 经度2, 纬度2, 速度2, 方向2, 运动状态2]\n",
    "# val_data = pd.read_excel('D:/data/trackHistory1_zao.xlsx')\n",
    "# val_data=val_data.iloc[130:150]  #150####################################################     133\n",
    "\n",
    "val_data = pd.read_excel('D:/data/0280/0280原始数据.xlsx')#850:881   799:809  \n",
    "val_data=val_data.iloc[799:899]  #150####################################################     133\n",
    "\n",
    "test=val_data[['经度','纬度']]\n",
    "\n",
    "\n",
    "\n",
    "#将文字类型转换为数字类型\n",
    "val_data['活动状态'] = val_data['设备状态'].apply(lambda x: extract_field(x, 3))#4\n",
    "val_data['活动状态']=val_data['活动状态'].map({'静止':0,'运动':1})\n",
    "val_data['定位方式']=val_data['定位方式'].map({'GPS有效定位':0,'GPS无效定位':1,'LBS':1})\n",
    "\n",
    "\n",
    "val_data=val_data[['定位时间','经度','纬度','活动状态','定位方式','方向','速度']]\n",
    "# print(val_data)\n",
    "\n",
    "val_data['前活动状态'] = val_data['活动状态'].shift(+1)\n",
    "val_data['前定位方式'] = val_data['定位方式'].shift(+1)\n",
    "val_data['前方向'] = val_data['方向'].shift(+1)\n",
    "val_data['前速度'] = val_data['速度'].shift(+1)\n",
    "val_data['前经度'] = val_data['经度'].shift(+1)\n",
    "val_data['前纬度'] = val_data['纬度'].shift(+1)\n",
    "\n",
    "# 计算两点间距\n",
    "val_data['距离差']=np.NaN\n",
    "val_data=Span(val_data)\n",
    "\n",
    "# val_data = val_data.dropna()  # 删除缺失值\n",
    "\n",
    "# 处理时间列\n",
    "val_data['定位时间'] = pd.to_datetime(val_data['定位时间'])  # 确保时间列是datetime格式\n",
    "# 计算时间差\n",
    "val_data['时间差']=val_data['定位时间'].diff().dt.total_seconds()\n",
    "val_data['时间差']=val_data['时间差'].fillna(0).astype(int)#将时间差转换为以秒为单位的int类型\n",
    "\n",
    "val_data['year'] = val_data['定位时间'].dt.year\n",
    "val_data['month'] = val_data['定位时间'].dt.month\n",
    "val_data['day'] = val_data['定位时间'].dt.day\n",
    "val_data['hour'] = val_data['定位时间'].dt.hour\n",
    "val_data['minute'] = val_data['定位时间'].dt.minute\n",
    "val_data['second'] = val_data['定位时间'].dt.second\n",
    "\n",
    "#计算加速度\n",
    "#由 V=V0+at    a=(V-V0)/t\n",
    "val_data['加速度']=(val_data['速度']-val_data['前速度'])/val_data['时间差']\n",
    "\n",
    "val_data = val_data.dropna()  # 删除缺失值\n",
    "\n",
    "# 删除原时间列\n",
    "val_data = val_data.drop(columns=['定位时间'])\n",
    "#     print(val_data)\n",
    "# # 提取特征和标签  #\n",
    "val_features = ['year', 'month', 'day', 'hour', 'minute', 'second', '方向','活动状态', '定位方式','速度','前经度', '前纬度','前活动状态','前定位方式','前方向','前速度','距离差','时间差','加速度']\n",
    "val_labels = ['经度','纬度']\n",
    "\n",
    "val_X = val_data[val_features].values\n",
    "val_y = val_data[val_labels].values\n",
    "\n",
    "\n",
    "# 归一化特征和标签\n",
    "val_scaler_X = MinMaxScaler()\n",
    "val_scaler_y = MinMaxScaler()\n",
    "\n",
    "val_X_scaled = val_scaler_X.fit_transform(val_X)\n",
    "val_y_scaled = val_scaler_y.fit_transform(val_y)\n",
    "\n",
    "# #标准化\n",
    "# scaler_X = StandardScaler()\n",
    "# scaler_X.fit(X)\n",
    "# X_scaled = scaler_X.fit_transform(X)\n",
    "# scaler_y = StandardScaler()\n",
    "# scaler_y.fit(y)\n",
    "# y_scaled = scaler_y.transform(y)\n",
    "\n",
    "# 创建时间序列数据\n",
    "def create_dataset(X, y, time_steps=1):\n",
    "    Xs, ys = [], []\n",
    "    for i in range(len(X) - time_steps):\n",
    "        Xs.append(X[i:i + time_steps])\n",
    "        ys.append(y[i + time_steps])\n",
    "    return np.array(Xs), np.array(ys)\n",
    "\n",
    "time_steps = 1  # 根据需求设置时间步长\n",
    "val_X_seq, val_y_seq = create_dataset(val_X_scaled, val_y_scaled, time_steps)\n",
    "\n",
    "####################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "dc9f28b7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T07:25:52.259226Z",
     "start_time": "2024-09-27T07:25:52.212492Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\anaconda\\Lib\\site-packages\\torch\\nn\\modules\\rnn.py:88: UserWarning: dropout option adds dropout after all but last recurrent layer, so non-zero dropout expects num_layers greater than 1, but got dropout=0.5 and num_layers=1\n",
      "  warnings.warn(\"dropout option adds dropout after all but last \"\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\625649971.py:75: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n"
     ]
    }
   ],
   "source": [
    "# 定义LSTM模型\n",
    "class LSTMModel(nn.Module):\n",
    "    def __init__(self, input_size, hidden_size, num_layers, output_size,dropout):\n",
    "        super(LSTMModel, self).__init__()\n",
    "        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True, dropout=dropout)\n",
    "        self.fc = nn.Linear(hidden_size, output_size)\n",
    "\n",
    "    def forward(self, x):\n",
    "        out, _ = self.lstm(x)\n",
    "        out = self.fc(out[:, -1, :])\n",
    "        return out\n",
    "\n",
    "# 加载模型\n",
    "input_size = 19  # 特征数\n",
    "hidden_size = 256  #256\n",
    "num_layers = 1 #LSTM层数\n",
    "output_size = 2  # 经纬度\n",
    "dropout=0.5\n",
    "\n",
    "model = LSTMModel(input_size, hidden_size, num_layers, output_size,dropout)\n",
    "model.load_state_dict(torch.load('D:/data/0280/lstm_model_3.pth',weights_only=True))\n",
    "model.eval()\n",
    "\n",
    "# 创建示例输入数据\n",
    "# example_data = np.random.rand(1, 10, input_size).astype(np.float32)\n",
    "input_tensor = torch.tensor(val_X_seq, dtype=torch.float32)\n",
    "\n",
    "# 进行预测\n",
    "with torch.no_grad():\n",
    "    prediction = model(input_tensor)\n",
    "\n",
    "# 反归一化\n",
    "y_pred = prediction.numpy()\n",
    "y_pred = val_scaler_y.inverse_transform(y_pred)\n",
    "\n",
    "# 输出经纬度\n",
    "# print(\"Predicted Latitude and Longitude:\", y_pred)\n",
    "# y_pred\n",
    "\n",
    "\n",
    "val_data[['预测经度','预测纬度','定位点和预测点距离差']]=np.NaN\n",
    "# print(val_data.shape)\n",
    "# print(val_data.columns)\n",
    "val_data.iloc[1:,21:23]=y_pred#################################################要改\n",
    "val_data=val_data.iloc[1:]\n",
    "# val_data\n",
    "\n",
    "\n",
    "test=val_y\n",
    "test=test[1:]\n",
    "test.shape\n",
    "\n",
    "\n",
    "import math  \n",
    "\n",
    "R = 6371.393  # 地球半径，单位为千米  \n",
    "for i in range(0,97):##############################################     1\n",
    "    # A地  \n",
    "    jingduA, weiduA = y_pred[i]\n",
    "    # B地  \n",
    "    jingduB, weiduB = test[i]\n",
    "\n",
    "    # 将经纬度转换为弧度  \n",
    "    latA, lonA = math.radians(weiduA), math.radians(jingduA)  \n",
    "    latB, lonB = math.radians(weiduB), math.radians(jingduB)  \n",
    "\n",
    "    # 哈弗辛公式  \n",
    "    dlat = latB - latA  \n",
    "    dlon = lonB - lonA  \n",
    "    a = math.sin(dlat/2)**2 + math.cos(latA) * math.cos(latB) * math.sin(dlon/2)**2  \n",
    "    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))  \n",
    "\n",
    "    distance = R * c * 1000  # 距离，单位为米  \n",
    "    # 转换为米  \n",
    "    val_data['定位点和预测点距离差'][131+i+1]=distance\n",
    "#     print(distance)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "ba56a6ac",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T07:25:53.121277Z",
     "start_time": "2024-09-27T07:25:53.107644Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>经度</th>\n",
       "      <th>纬度</th>\n",
       "      <th>活动状态</th>\n",
       "      <th>定位方式</th>\n",
       "      <th>方向</th>\n",
       "      <th>速度</th>\n",
       "      <th>前活动状态</th>\n",
       "      <th>前定位方式</th>\n",
       "      <th>前方向</th>\n",
       "      <th>前速度</th>\n",
       "      <th>...</th>\n",
       "      <th>year</th>\n",
       "      <th>month</th>\n",
       "      <th>day</th>\n",
       "      <th>hour</th>\n",
       "      <th>minute</th>\n",
       "      <th>second</th>\n",
       "      <th>加速度</th>\n",
       "      <th>预测经度</th>\n",
       "      <th>预测纬度</th>\n",
       "      <th>定位点和预测点距离差</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>801</th>\n",
       "      <td>113.814408</td>\n",
       "      <td>22.695658</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>60</td>\n",
       "      <td>29.8</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>61.0</td>\n",
       "      <td>18.8</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>7</td>\n",
       "      <td>45</td>\n",
       "      <td>0.366667</td>\n",
       "      <td>113.818970</td>\n",
       "      <td>22.697378</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>802</th>\n",
       "      <td>113.816664</td>\n",
       "      <td>22.696856</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>62</td>\n",
       "      <td>33.9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>29.8</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "      <td>0.136667</td>\n",
       "      <td>113.821907</td>\n",
       "      <td>22.699141</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>803</th>\n",
       "      <td>113.818000</td>\n",
       "      <td>22.697534</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>61</td>\n",
       "      <td>13.7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>62.0</td>\n",
       "      <td>33.9</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>8</td>\n",
       "      <td>46</td>\n",
       "      <td>-0.651613</td>\n",
       "      <td>113.819504</td>\n",
       "      <td>22.698669</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>804</th>\n",
       "      <td>113.818864</td>\n",
       "      <td>22.697958</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>71</td>\n",
       "      <td>11.1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>61.0</td>\n",
       "      <td>13.7</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>9</td>\n",
       "      <td>16</td>\n",
       "      <td>-0.086667</td>\n",
       "      <td>113.823265</td>\n",
       "      <td>22.699751</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>805</th>\n",
       "      <td>113.820000</td>\n",
       "      <td>22.698478</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>65</td>\n",
       "      <td>17.4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>71.0</td>\n",
       "      <td>11.1</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>9</td>\n",
       "      <td>46</td>\n",
       "      <td>0.210000</td>\n",
       "      <td>113.826370</td>\n",
       "      <td>22.701624</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>894</th>\n",
       "      <td>113.943560</td>\n",
       "      <td>22.687988</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>272</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>272.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>54</td>\n",
       "      <td>11</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>113.939659</td>\n",
       "      <td>22.689075</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>895</th>\n",
       "      <td>113.943688</td>\n",
       "      <td>22.687976</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>83</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>272.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>54</td>\n",
       "      <td>41</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>113.939796</td>\n",
       "      <td>22.689081</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>896</th>\n",
       "      <td>113.943688</td>\n",
       "      <td>22.687976</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>83</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>83.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>55</td>\n",
       "      <td>11</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>113.936737</td>\n",
       "      <td>22.689598</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>897</th>\n",
       "      <td>113.943720</td>\n",
       "      <td>22.688700</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>42</td>\n",
       "      <td>8.9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>83.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>55</td>\n",
       "      <td>42</td>\n",
       "      <td>0.287097</td>\n",
       "      <td>113.933304</td>\n",
       "      <td>22.690855</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>898</th>\n",
       "      <td>113.943456</td>\n",
       "      <td>22.688750</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>179</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>8.9</td>\n",
       "      <td>...</td>\n",
       "      <td>2024</td>\n",
       "      <td>7</td>\n",
       "      <td>29</td>\n",
       "      <td>20</td>\n",
       "      <td>56</td>\n",
       "      <td>12</td>\n",
       "      <td>-0.296667</td>\n",
       "      <td>113.935356</td>\n",
       "      <td>22.690317</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>98 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             经度         纬度  活动状态  定位方式   方向    速度  前活动状态  前定位方式    前方向   前速度  \\\n",
       "801  113.814408  22.695658     1     0   60  29.8    1.0    0.0   61.0  18.8   \n",
       "802  113.816664  22.696856     1     0   62  33.9    1.0    0.0   60.0  29.8   \n",
       "803  113.818000  22.697534     1     0   61  13.7    1.0    0.0   62.0  33.9   \n",
       "804  113.818864  22.697958     1     0   71  11.1    1.0    0.0   61.0  13.7   \n",
       "805  113.820000  22.698478     1     0   65  17.4    1.0    0.0   71.0  11.1   \n",
       "..          ...        ...   ...   ...  ...   ...    ...    ...    ...   ...   \n",
       "894  113.943560  22.687988     1     0  272   0.0    1.0    0.0  272.0   0.0   \n",
       "895  113.943688  22.687976     1     0   83   0.0    1.0    0.0  272.0   0.0   \n",
       "896  113.943688  22.687976     1     0   83   0.0    1.0    0.0   83.0   0.0   \n",
       "897  113.943720  22.688700     1     0   42   8.9    1.0    0.0   83.0   0.0   \n",
       "898  113.943456  22.688750     1     0  179   0.0    1.0    0.0   42.0   8.9   \n",
       "\n",
       "     ...  year  month  day  hour  minute  second       加速度        预测经度  \\\n",
       "801  ...  2024      7   29    20       7      45  0.366667  113.818970   \n",
       "802  ...  2024      7   29    20       8      15  0.136667  113.821907   \n",
       "803  ...  2024      7   29    20       8      46 -0.651613  113.819504   \n",
       "804  ...  2024      7   29    20       9      16 -0.086667  113.823265   \n",
       "805  ...  2024      7   29    20       9      46  0.210000  113.826370   \n",
       "..   ...   ...    ...  ...   ...     ...     ...       ...         ...   \n",
       "894  ...  2024      7   29    20      54      11  0.000000  113.939659   \n",
       "895  ...  2024      7   29    20      54      41  0.000000  113.939796   \n",
       "896  ...  2024      7   29    20      55      11  0.000000  113.936737   \n",
       "897  ...  2024      7   29    20      55      42  0.287097  113.933304   \n",
       "898  ...  2024      7   29    20      56      12 -0.296667  113.935356   \n",
       "\n",
       "          预测纬度  定位点和预测点距离差  \n",
       "801  22.697378         NaN  \n",
       "802  22.699141         NaN  \n",
       "803  22.698669         NaN  \n",
       "804  22.699751         NaN  \n",
       "805  22.701624         NaN  \n",
       "..         ...         ...  \n",
       "894  22.689075         NaN  \n",
       "895  22.689081         NaN  \n",
       "896  22.689598         NaN  \n",
       "897  22.690855         NaN  \n",
       "898  22.690317         NaN  \n",
       "\n",
       "[98 rows x 24 columns]"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "fd0b5379",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T07:25:53.779365Z",
     "start_time": "2024-09-27T07:25:53.700355Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from scipy.interpolate import CubicSpline\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "x= val_data[['经度']]\n",
    "y =val_data[['纬度']]\n",
    "plt.figure(figsize=(5, 5),dpi=100)\n",
    "plt.plot(x, y,'-r',label='原始数据')\n",
    "plt.plot(val_data[['预测经度']],val_data[['预测纬度']],label='预测数据')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "a99b1806",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-23T06:59:07.231569Z",
     "start_time": "2024-08-23T06:59:07.228698Z"
    },
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# val_data[['预测经度','预测纬度','定位点和预测点距离差']]=np.NaN\n",
    "# val_data.iloc[1:,21:23]=y_pred#################################################要改\n",
    "# val_data=val_data.iloc[1:]\n",
    "# val_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "386a9549",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T06:50:02.087700Z",
     "start_time": "2024-09-27T06:50:02.084483Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(99, 2)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "a70a8923",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T06:50:02.967383Z",
     "start_time": "2024-09-27T06:50:02.964221Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(98, 2)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test=val_y\n",
    "test=test[1:]\n",
    "test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "ef56deb5",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T06:50:10.568877Z",
     "start_time": "2024-09-27T06:50:10.555851Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "260.4558727474719\n",
      "171.51814386183216\n",
      "186.3257371198449\n",
      "137.15194192887316\n",
      "394.71062754729934\n",
      "186.09935771545491\n",
      "48.96979980027112\n",
      "352.9466403696884\n",
      "387.08939445632035\n",
      "1185.239296757056\n",
      "233.96418844242336\n",
      "763.9582442212121\n",
      "338.1682765051299\n",
      "274.2610465841578\n",
      "515.4510313505879\n",
      "266.07643666574404\n",
      "1185.5943376675764\n",
      "999.7895453298862\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n",
      "C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_3144\\57686152.py:22: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  val_data['定位点和预测点距离差'][131+i+1]=distance\n"
     ]
    }
   ],
   "source": [
    "import math  \n",
    "  \n",
    "R = 6371.393  # 地球半径，单位为千米  \n",
    "for i in range(0,18):##############################################     1\n",
    "    # A地  \n",
    "    jingduA, weiduA = y_pred[i]\n",
    "    # B地  \n",
    "    jingduB, weiduB = test[i]\n",
    "\n",
    "    # 将经纬度转换为弧度  \n",
    "    latA, lonA = math.radians(weiduA), math.radians(jingduA)  \n",
    "    latB, lonB = math.radians(weiduB), math.radians(jingduB)  \n",
    "\n",
    "    # 哈弗辛公式  \n",
    "    dlat = latB - latA  \n",
    "    dlon = lonB - lonA  \n",
    "    a = math.sin(dlat/2)**2 + math.cos(latA) * math.cos(latB) * math.sin(dlon/2)**2  \n",
    "    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))  \n",
    "\n",
    "    distance = R * c * 1000  # 距离，单位为米  \n",
    "    # 转换为米  \n",
    "    val_data['定位点和预测点距离差'][131+i+1]=distance\n",
    "    print(distance)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "6b3a3e90",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-09-27T06:51:49.543652Z",
     "start_time": "2024-09-27T06:51:49.538493Z"
    },
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# # 计算距离\n",
    "# def Span(data):\n",
    "#     R = 6371.393  # 地球半径，单位为千米  ##851,881  131,150\n",
    "#     for i in range(131,150):###################################################################          133\n",
    "#         # A地  \n",
    "#         jingduA, weiduA = data.loc[i-1,['经度','纬度']]\n",
    "#         # B地  \n",
    "#         jingduB, weiduB = data.loc[i,['经度','纬度']]\n",
    "\n",
    "#         # 将经纬度转换为弧度  \n",
    "#         latA, lonA = math.radians(weiduA), math.radians(jingduA)  \n",
    "#         latB, lonB = math.radians(weiduB), math.radians(jingduB)  \n",
    "\n",
    "#         # 哈弗辛公式  \n",
    "#         dlat = latB - latA  \n",
    "#         dlon = lonB - lonA  \n",
    "#         a = math.sin(dlat/2)**2 + math.cos(latA) * math.cos(latB) * math.sin(dlon/2)**2  \n",
    "#         c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))  \n",
    "\n",
    "#         distance = R * c * 1000  # 距离，单位为米  \n",
    "#         # 转换为米  \n",
    "#         data['距离差'][i]=distance\n",
    "#     return data\n",
    "# count=0\n",
    "# for i in range(0,42):\n",
    "#     # 假设 data 是一个 Pandas DataFrame，包含经纬度、速度、方向和运动状态的序列数据\n",
    "#     # 数据集格式：[经度1, 纬度1, 速度1, 方向1, 运动状态1, 经度2, 纬度2, 速度2, 方向2, 运动状态2]\n",
    "#     val_data = pd.read_excel('D:/data/trackHistory1_zao.xlsx')\n",
    "#     val_data=val_data.iloc[130:150]  #150####################################################     133\n",
    "\n",
    "#     # val_data = pd.read_excel('D:/data/0280/0280原始数据.xlsx')\n",
    "#     # val_data=val_data.iloc[850:881]  #150####################################################     133\n",
    "\n",
    "#     test=val_data[['经度','纬度']]\n",
    "\n",
    "\n",
    "\n",
    "#     #将文字类型转换为数字类型\n",
    "#     val_data['活动状态'] = val_data['设备状态'].apply(lambda x: extract_field(x, 4))\n",
    "#     val_data['活动状态']=val_data['活动状态'].map({'静止':0,'运动':1})\n",
    "#     val_data['定位方式']=val_data['定位方式'].map({'GPS有效定位':0,'GPS无效定位':1,'LBS':1})\n",
    "\n",
    "\n",
    "#     val_data=val_data[['定位时间','经度','纬度','活动状态','定位方式','方向','速度']]\n",
    "#     # print(val_data)\n",
    "\n",
    "#     val_data['前活动状态'] = val_data['活动状态'].shift(+1)\n",
    "#     val_data['前定位方式'] = val_data['定位方式'].shift(+1)\n",
    "#     val_data['前方向'] = val_data['方向'].shift(+1)\n",
    "#     val_data['前速度'] = val_data['速度'].shift(+1)\n",
    "#     val_data['前经度'] = val_data['经度'].shift(+1)\n",
    "#     val_data['前纬度'] = val_data['纬度'].shift(+1)\n",
    "\n",
    "#     # 计算两点间距\n",
    "#     val_data['距离差']=np.NaN\n",
    "#     val_data=Span(val_data)\n",
    "\n",
    "#     # val_data = val_data.dropna()  # 删除缺失值\n",
    "\n",
    "#     # 处理时间列\n",
    "#     val_data['定位时间'] = pd.to_datetime(val_data['定位时间'])  # 确保时间列是datetime格式\n",
    "#     # 计算时间差\n",
    "#     val_data['时间差']=val_data['定位时间'].diff().dt.total_seconds()\n",
    "#     val_data['时间差']=val_data['时间差'].fillna(0).astype(int)#将时间差转换为以秒为单位的int类型\n",
    "\n",
    "#     val_data['year'] = val_data['定位时间'].dt.year\n",
    "#     val_data['month'] = val_data['定位时间'].dt.month\n",
    "#     val_data['day'] = val_data['定位时间'].dt.day\n",
    "#     val_data['hour'] = val_data['定位时间'].dt.hour\n",
    "#     val_data['minute'] = val_data['定位时间'].dt.minute\n",
    "#     val_data['second'] = val_data['定位时间'].dt.second\n",
    "\n",
    "#     #计算加速度\n",
    "#     #由 V=V0+at    a=(V-V0)/t\n",
    "#     val_data['加速度']=(val_data['速度']-val_data['前速度'])/val_data['时间差']\n",
    "\n",
    "#     val_data = val_data.dropna()  # 删除缺失值\n",
    "\n",
    "#     # 删除原时间列\n",
    "#     val_data = val_data.drop(columns=['定位时间'])\n",
    "# #     print(val_data)\n",
    "#     # # 提取特征和标签\n",
    "#     val_features = ['year', 'month', 'day', 'hour', 'minute', 'second', '方向','活动状态', '定位方式','速度','前经度', '前纬度','前活动状态','前定位方式','前方向','前速度','距离差','时间差','加速度']\n",
    "#     val_labels = ['经度','纬度']\n",
    "\n",
    "#     val_X = val_data[val_features].values\n",
    "#     val_y = val_data[val_labels].values\n",
    "\n",
    "\n",
    "#     # 归一化特征和标签\n",
    "#     val_scaler_X = MinMaxScaler()\n",
    "#     val_scaler_y = MinMaxScaler()\n",
    "\n",
    "#     val_X_scaled = val_scaler_X.fit_transform(val_X)\n",
    "#     val_y_scaled = val_scaler_y.fit_transform(val_y)\n",
    "\n",
    "#     # #标准化\n",
    "#     # scaler_X = StandardScaler()\n",
    "#     # scaler_X.fit(X)\n",
    "#     # X_scaled = scaler_X.fit_transform(X)\n",
    "#     # scaler_y = StandardScaler()\n",
    "#     # scaler_y.fit(y)\n",
    "#     # y_scaled = scaler_y.transform(y)\n",
    "\n",
    "#     # 创建时间序列数据\n",
    "#     def create_dataset(X, y, time_steps=1):\n",
    "#         Xs, ys = [], []\n",
    "#         for i in range(len(X) - time_steps):\n",
    "#             Xs.append(X[i:i + time_steps])\n",
    "#             ys.append(y[i + time_steps])\n",
    "#         return np.array(Xs), np.array(ys)\n",
    "\n",
    "#     time_steps = 1  # 根据需求设置时间步长\n",
    "#     val_X_seq, val_y_seq = create_dataset(val_X_scaled, val_y_scaled, time_steps)\n",
    "\n",
    "# ####################################################################################\n",
    "\n",
    "\n",
    "\n",
    "#     # 定义LSTM模型\n",
    "#     class LSTMModel(nn.Module):\n",
    "#         def __init__(self, input_size, hidden_size, num_layers, output_size,dropout):\n",
    "#             super(LSTMModel, self).__init__()\n",
    "#             self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True, dropout=dropout)\n",
    "#             self.fc = nn.Linear(hidden_size, output_size)\n",
    "\n",
    "#         def forward(self, x):\n",
    "#             out, _ = self.lstm(x)\n",
    "#             out = self.fc(out[:, -1, :])\n",
    "#             return out\n",
    "\n",
    "#     # 加载模型\n",
    "#     input_size = 19  # 特征数\n",
    "#     hidden_size = 256  #256\n",
    "#     num_layers = 1 #LSTM层数\n",
    "#     output_size = 2  # 经纬度\n",
    "#     dropout=0.5\n",
    "\n",
    "#     model = LSTMModel(input_size, hidden_size, num_layers, output_size,dropout)\n",
    "#     model.load_state_dict(torch.load(f'D:/data/399071350587_1/lstm_model_{count+1}.pth',weights_only=True))\n",
    "#     model.eval()\n",
    "\n",
    "#     # 创建示例输入数据\n",
    "#     # example_data = np.random.rand(1, 10, input_size).astype(np.float32)\n",
    "#     input_tensor = torch.tensor(val_X_seq, dtype=torch.float32)\n",
    "\n",
    "#     # 进行预测\n",
    "#     with torch.no_grad():\n",
    "#         prediction = model(input_tensor)\n",
    "\n",
    "#     # 反归一化\n",
    "#     y_pred = prediction.numpy()\n",
    "#     y_pred = val_scaler_y.inverse_transform(y_pred)\n",
    "\n",
    "#     # 输出经纬度\n",
    "#     # print(\"Predicted Latitude and Longitude:\", y_pred)\n",
    "#     # y_pred\n",
    "\n",
    "\n",
    "#     val_data[['预测经度','预测纬度','定位点和预测点距离差']]=np.NaN\n",
    "#     val_data.iloc[1:,21:23]=y_pred#################################################要改\n",
    "#     val_data=val_data.iloc[1:]\n",
    "#     # val_data\n",
    "\n",
    "\n",
    "#     test=val_y\n",
    "#     test=test[1:]\n",
    "#     test.shape\n",
    "\n",
    "\n",
    "#     import math  \n",
    "\n",
    "#     R = 6371.393  # 地球半径，单位为千米  \n",
    "#     for i in range(0,18):##############################################     1\n",
    "#         # A地  \n",
    "#         jingduA, weiduA = y_pred[i]\n",
    "#         # B地  \n",
    "#         jingduB, weiduB = test[i]\n",
    "\n",
    "#         # 将经纬度转换为弧度  \n",
    "#         latA, lonA = math.radians(weiduA), math.radians(jingduA)  \n",
    "#         latB, lonB = math.radians(weiduB), math.radians(jingduB)  \n",
    "\n",
    "#         # 哈弗辛公式  \n",
    "#         dlat = latB - latA  \n",
    "#         dlon = lonB - lonA  \n",
    "#         a = math.sin(dlat/2)**2 + math.cos(latA) * math.cos(latB) * math.sin(dlon/2)**2  \n",
    "#         c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))  \n",
    "\n",
    "#         distance = R * c * 1000  # 距离，单位为米  \n",
    "#         # 转换为米  \n",
    "#         val_data['定位点和预测点距离差'][131+i+1]=distance\n",
    "#         print(distance)\n",
    "#     count=count+1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "dbbf0850",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-21T11:28:53.496824Z",
     "start_time": "2024-08-21T11:28:53.494999Z"
    }
   },
   "outputs": [],
   "source": [
    "# val_data.to_excel('D:/data/测试结果.xlsx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "9f9a0c7c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-21T11:28:53.500032Z",
     "start_time": "2024-08-21T11:28:53.497842Z"
    }
   },
   "outputs": [],
   "source": [
    "# def is_within_range(angle1, angle2, range_degrees=120):\n",
    "#     \"\"\"\n",
    "#     判断 angle2 是否在 angle1 的 ±range_degrees 范围内。\n",
    "#     参数:\n",
    "#     angle1, angle2: 输入的角度值，范围是0到360度。\n",
    "#     range_degrees: 范围值，默认是120度。\n",
    "#     返回:\n",
    "#     如果 angle2 在 angle1 的 ±range_degrees 范围内，则返回 True；否则返回 False。\n",
    "#     \"\"\"\n",
    "#     # 处理范围的最小值和最大值\n",
    "#     lower_bound = (angle1 - range_degrees) % 360\n",
    "#     upper_bound = (angle1 + range_degrees) % 360\n",
    "\n",
    "#     # 判断角度是否在范围内\n",
    "#     if lower_bound < upper_bound:\n",
    "#         # 范围没有跨越0度\n",
    "#         return lower_bound <= angle2 <= upper_bound\n",
    "#     else:\n",
    "#         # 范围跨越了0度\n",
    "#         return angle2 >= lower_bound or angle2 <= upper_bound\n",
    "\n",
    "# # 示例用法\n",
    "# angle1 = 349\n",
    "# angle2 = 211\n",
    "\n",
    "# result = is_within_range(angle1, angle2)\n",
    "# print(f\"角度 {angle2} 是否在角度 {angle1} 的 ±120° 范围内？ {result}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "ddd7eb22",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-08-21T11:28:53.503430Z",
     "start_time": "2024-08-21T11:28:53.501038Z"
    }
   },
   "outputs": [],
   "source": [
    "# for i in range(0,1):####################################################################################          1\n",
    "#     if val_data['定位方式'][131+i+1]==0:  #判断定位是否有效\n",
    "#         if is_within_range(val_data['方向'][131+i], val_data['方向'][131+i+1]):   #判断方向是否有效\n",
    "#             if val_data['距离差'][131+i+1]<200:  #判断定位点是否有效\n",
    "#                 print('当前坐标点有效')\n",
    "#             else:\n",
    "#                 print('当前坐标无效')\n",
    "#                 val_data['经度'][131+i+1]=val_data['预测经度'][131+i+1]\n",
    "#                 val_data['纬度'][131+i+1]=val_data['预测纬度'][131+i+1]\n",
    "#         else:\n",
    "#             print('当前坐标无效')\n",
    "#             val_data['经度'][131+i+1]=val_data['预测经度'][131+i+1]\n",
    "#             val_data['纬度'][131+i+1]=val_data['预测纬度'][131+i+1]\n",
    "#     else:\n",
    "#         print('当前坐标无效')\n",
    "#         val_data['经度'][131+i+1]=val_data['预测经度'][131+i+1]\n",
    "#         val_data['纬度'][131+i+1]=val_data['预测纬度'][131+i+1]\n",
    "# val_data"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
